package com.beauty.product.service;

import com.beauty.product.document.ProductDocument;
import com.beauty.product.dto.PageResponse;
import com.beauty.product.dto.ProductDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface ProductElasticsearchService {

    /**
     * 将产品保存到ES
     */
    ProductDocument save(ProductDocument productDocument);

    /**
     * 批量保存产品到ES
     */
    Iterable<ProductDocument> saveAll(List<ProductDocument> productDocuments);

    /**
     * 根据ID从ES获取产品
     */
    ProductDocument findById(String id);

    /**
     * 根据关键词搜索产品
     */
    PageResponse<ProductDto> search(String keyword, Pageable pageable);

    /**
     * 高级搜索产品
     */
    PageResponse<ProductDto> advancedSearch(String name, String brand, String description,
                                           BigDecimal minPrice, BigDecimal maxPrice,
                                           Long categoryId, Boolean isPublished,
                                           Boolean isRecommended, Boolean isNew, Boolean isHot,
                                           Pageable pageable);

    /**
     * 根据ID删除ES中的产品
     */
    void deleteById(String id);

    /**
     * 根据MySQL中的产品同步到ES
     */
    void syncProductFromDB(String productId);

    /**
     * 根据MySQL同步所有产品到ES
     */
    void syncAllProductsFromDB();

    /**
     * 根据关键词搜索产品
     */
//    PageResponse<ProductDto> searchByKeyword(String keyword, Pageable pageable);

}
